﻿using System.Collections.ObjectModel;
using Renci.Data.Interop.OpenGIS.Ic.Ism;

namespace Renci.Data.Interop.OpenGIS.Tml
{
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.opengis.net/tml")]
    [System.Xml.Serialization.XmlRootAttribute("system", Namespace = "http://www.opengis.net/tml", IsNullable = false)]
    public class SystemType
    {
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("identification")]
        public SystemTypeIdentification Identification { get; set; }

        /// <summary>
        /// Clock counter.
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute("sysClk")]
        public SystemTypeSysClk SystemClock { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("system", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("systems")]
        public Collection<SystemType> Systems { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("subject", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("subjects")]
        public Collection<Subject> Subjects { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("transducer", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("transducers")]
        public Collection<TransducerType> Transducers { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("process", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("processes")]
        public Collection<ProcessType> Processes { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("relations")]
        public SystemTypeRelations Relations { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("clusterDesc", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("clusterDescriptions")]
        public Collection<ClusterDescription> ClusterDescriptions { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("property", IsNullable = false)]
        [System.Xml.Serialization.XmlArrayAttribute("otherProperties")]
        public Collection<object> OtherProperties { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute("name")]
        public string Name { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute("uid", DataType = "anyURI")]
        public string Uid { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute("uidRef", DataType = "anyURI")]
        public string UidRef { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute("classification", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public ClassificationType Classification { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool ClassificationSpecified { get; set; }

        /// <summary>
        /// ISO 3166-1 trigraph(s) of the owner or producer country(ies) and/or CAPCO-specified tetragraphs of international organizations. 
        /// Either (a) a single trigraph or tetragraph or (b) a space-delimited list of trigraphs followed by tetragraphs. 
        /// Trigraphs must be in alphabetical order and tetragraphs must be in alphabetical order.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("ownerProducer", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string OwnerProducer { get; set; }

        /// <summary>
        /// Authorized abbreviation(s) of SCI control system(s). 
        /// Either (a) a single abbreviation or (b) a space-delimited list of abbreviations in the order prescribed in the CAPCO Register.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("SCIcontrols", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string SciControls { get; set; }

        /// <summary>
        /// Authorized Special Access Required program digraph(s) or trigraph(s) preceded by "SAR-". 
        /// Either (a) a single digraph or trigraph or (b) a space-delimited list of digraphs or trigraphs.
        /// </summary>
        /// <example>SAR-ABC SAR-DEF ...</example>
        [System.Xml.Serialization.XmlAttributeAttribute("SARIdentifier", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string SarIdentifier { get; set; }

        /// <summary>
        /// Authorized dissemination control portion mark abbreviation(s).
        /// Either (a) a single abbreviation or (b) a space-delimited list of abbreviations in the order shown in the CAPCO Register.
        /// </summary>
        /// <remarks>Exception: For the "REL" abbreviation, omit the country code trigraph(s) and instead place the trigraph(s) in the <see cref="ReleasableTo"/> property.</remarks>
        [System.Xml.Serialization.XmlAttributeAttribute("disseminationControls", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string DisseminationControls { get; set; }

        /// <summary>
        /// Non-US classification portion marking for foreign government information in a document portion. 
        /// Use this property to record a source country when the intent is to post the document to a shared space with the source identified.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("FGIsourceOpen", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string FgiSourceOpen { get; set; }

        /// <summary>
        /// Non-US classification portion marking for foreign government information in a document portion. 
        /// Use this attribute to record a source country when the intent is to filter out the identity of the source prior to posting the document to a shared space.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("FGIsourceProtected", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string FgiSourceProtected { get; set; }

        /// <summary>
        /// ISO 3166-1 trigraphic codes of countries to which the associated content can be released. 
        /// Include "USA" in all instances. Use a space- delimited list with "USA" first, followed by the other trigraph(s) in alphabetical order.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("releasableTo", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string ReleasableTo { get; set; }

        /// <summary>
        /// Authorized non-IC portion marking abbreviation(s) from the CAPCO Register. 
        /// Either (a) a single non-IC abbreviated marking or (b) a space-delimited list of abbreviations in the order shown in the CAPCO Register.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("nonICmarkings", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string NonIcMarkings { get; set; }

        /// <summary>
        /// Use as specified by E.O. 12958.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("classifiedBy", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public string ClassifiedBy { get; set; }

        /// <summary>
        /// A text string containing one or more paragraph numbers, 1.4(a) through 1.4(h), taken from E.O. 12958, as amended. 
        /// Enter the paragraph references as they should appear in a classification/declassification block.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("classificationReason", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public string ClassificationReason { get; set; }

        /// <summary>
        /// A text string containing (a) the title and date of a specific source document, 
        /// or (b) the title and date of an organization classification guide, 
        /// or (c) the literal string "Multiple Sources".
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("derivedFrom", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public string DerivedFrom { get; set; }

        /// <summary>
        /// A specific date, in the format YYYY-MM-DD, at which the applicable information is automatically declassified.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("declassDate", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "date")]
        public System.DateTime DeclassDate { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool DeclassDateSpecified { get; set; }

        /// <summary>
        /// A textual description of an event that triggers declassification.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("declassEvent", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public string DeclassEvent { get; set; }

        /// <summary>
        /// One or more of the exceptions to 25-year declassification.
        /// </summary>
        /// <remarks>
        /// Specify "25X1-human", "25X1", "25X2", ..., "25X9". 
        /// If more than one exception applies, use a space-delimited list. If "25X1-human" applies, it should be first in a list.
        /// </remarks>
        [System.Xml.Serialization.XmlAttributeAttribute("declassException", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string DeclassException { get; set; }

        /// <summary>
        /// One or more tokens indicating that a source that is exempted from automatic declassification applies.
        /// </summary>
        /// <remarks>
        /// Specify "OADR", "X1", "X2", ..., "X8". If more than one applies, use a space-delimited list.
        /// </remarks>
        [System.Xml.Serialization.XmlAttributeAttribute("typeOfExemptedSource", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "NMTOKENS")]
        public string TypeOfExemptedSource { get; set; }

        /// <summary>
        /// A specific date, in the format YYYY-MM-DD. Used in conjunction with <see cref="TypeOfExemptedSource"/> property.
        /// </summary>
        /// <remarks>If there are multiple exempted sources, specify the date of the exempted source that has the most recent date.</remarks>
        [System.Xml.Serialization.XmlAttributeAttribute("dateOfExemptedSource", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2", DataType = "date")]
        public System.DateTime DateOfExemptedSource { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool DateOfExemptedSourceSpecified { get; set; }

        /// <summary>
        /// A true/false indication that manual review is required for declassification. 
        /// Use this property to force the appearance of "//MR" in the header and footer marking titles. 
        /// Use this attribute ONLY when it is necessary to override the business logic applied to classification and control markings in the document 
        /// to determine whether manual review is required.
        /// </summary>
        [System.Xml.Serialization.XmlAttributeAttribute("declassManualReview", Form = System.Xml.Schema.XmlSchemaForm.Qualified, Namespace = "urn:us:gov:ic:ism:v2")]
        public bool? DeclassManualReview { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool DeclassManualReviewSpecified
        {
            get
            {
                return DeclassManualReview.HasValue;
            }
        }
    }
}
